package com.example.leetcode.trainingcamp.week12;

/**
 * 给定两个整型数字 N 与 M，以及表示比特位置的 i 与 j（i <= j，且从 0 位开始计算）。
 *
 * 编写一种方法，使 M 对应的二进制数字插入 N 对应的二进制数字的第 i ~ j 位区域，不足之处用 0 补齐。具体插入过程如图所示。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/insert-into-bits-lcci
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Test05_01 {


    public int insertBits(int N, int M, int i, int j) {
        int mask =1;
        int[] Nbits = new int[32];
        int[] Mbits = new int[32];
        fillArray(Nbits,N);
        fillArray(Mbits,M);
        int k = 0;
        int r = 0;
        for (int t =0; t<32;t++){
            int bit = 0;
            if (t >= i && t<=j){
                bit = Mbits[k];
                k++;
            }else{
                bit = Nbits[t];
            }
            r += mask * bit;
            mask <<= 1;
        }
        return r;
    }


    private void fillArray(int[] bits, int num){
        int mask = 1;
        for (int i = 0;i<32;i++){
            if ((num & mask) != 0){
                bits[i] = 1;
            }
            mask <<= 1;
        }
    }

    public static void main(String[] args) {
        Test05_01 t = new Test05_01();
        System.out.println(t.insertBits(1024, 19, 2, 6));
    }
}
